/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import dominio.Cancion;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
 *
 * @author VWV
 */
public class ManejoXml implements IPersistencia {

    private String entrada;
    private String salida;

    public ManejoXml() {
        entrada = "archivos/XML/cancionesGuardadas.xml";
        salida = "archivos/XML/cancionesNuevas.xml";
    }

    public ManejoXml(String entrada, String salida) {
        this.entrada = entrada;
        this.salida = salida;
    }

    public List<Cancion> leerCanciones() {
        List<Cancion> cancionesPorEnviar = null;
        SAXBuilder builder = new SAXBuilder();
        Document doc = null;

        try {
            doc = builder.build(getEntrada());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        if (doc != null) {
            cancionesPorEnviar = new ArrayList<Cancion>();
            List<Element> contenido = doc.getRootElement().getChildren();
            for (Element e : contenido) {
                cancionesPorEnviar.add(new Cancion(
                        e.getChild("nombre").getText(),
                        e.getChild("artista").getText(),
                        e.getChild("url").getText()));
            }
        } else {
            System.out.println("Problemas cargando el xml de canciones");
            cancionesPorEnviar = null;
        }
        return cancionesPorEnviar;
    }

    public void escribirCanciones(List<Cancion> canciones) {
        if (canciones != null) {
            Element root = new Element("canciones");

            for (Cancion cancion : canciones) {
                Element song = new Element("cancion");
                song.addContent(new Element("nombre").addContent(cancion.getNombre()));
                song.addContent(new Element("artista").addContent(cancion.getAutor()));
                song.addContent(new Element("url").addContent(cancion.getUrl()));
                root.addContent(song);
            }

            Document docSalida = new Document(root);

            try {
                XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
                FileWriter writer = new FileWriter(getSalida());
                outputter.output(docSalida, writer);
                writer.close();
            } catch (java.io.IOException e) {
                e.printStackTrace();
                System.out.println("problema con I/O al escribir el xml");
            } catch (Exception e) {
                System.out.println("problema al escribir el xml");
            }
        } else {
            System.out.println("no se puede persistir una lista de canciones vacia");
        }
    }

        /**
         * @return the entrada
         */
        public String getEntrada() {
            return entrada;
        }

        /**
         * @param entrada the entrada to set
         */
        public void setEntrada(String entrada) {
            this.entrada = entrada;
    }

    /**
     * @return the salida
     */
    public String getSalida() {
        return salida;
    }

    /**
     * @param salida the salida to set
     */
    public void setSalida(String salida) {
        this.salida = salida;
    }
}
